package main

import (
	"errors"
	"fmt"
	"os"
)

func length(s string) int {
	println("call length.")
	return len(s)
}

func main() {
	s := "abcd"
	// 这样写会多次调佣length函数
	for i, n := 0, length(s); i < n; i++ {
		println(i, s[i])
	}

}

//if else用法
func ifElse() {
	var a = 100
	var b = 200

	if a == 100 {
		if b == 200 {
			fmt.Println("a 的值为 100 ， b 的值为 200\n")
		}
	}
}

//for用法
func forTest() {
	sum := 0
	for i := 0; i < 10; i++ {
		sum += i
	}

	for {
		sum++
		if sum > 100 {
			break
		}
	}

	n := 10
	for n > 0 {
		n--
		fmt.Println(n)
	}

	m := 2
	for ; m > 0; m-- {
		fmt.Println(m)
	}
}

// 99乘法表
func JjChenFa() {
	// 遍历, 决定处理第几行
	for y := 1; y <= 9; y++ {
		// 遍历, 决定这一行有多少列
		for x := 1; x <= y; x++ {
			fmt.Printf("%d*%d=%d ", x, y, x*y)
		}
		// 手动生成回车
		fmt.Println()
	}
}

// goto用法
func goToTest() {
	err := firstCheckError()
	if err != nil {
		fmt.Println(err)
		goto onExit
	}
	err = secondCheckError()
	if err != nil {
		fmt.Println(err)
		goto onExit
	}
	fmt.Println("done")
	return
onExit:
	exitProcess()
}

func firstCheckError() interface{} {
	return errors.New("错误1")
}

func secondCheckError() interface{} {
	return errors.New("错误2")
}

func exitProcess() {
	fmt.Println("exit")
	//退出
	os.Exit(1)
}
